package bossgo;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.Keys; // 新增：用于键盘操作
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;
import java.util.*;
import java.util.Set;
import java.util.concurrent.TimeUnit;

public class BossGo {
    static  String msg = "您好！作为转行Java开发者，我已完成SpringBoot+Redis+Mybatis等工作中核心技能点的系统学习。在游戏陪玩平台系统中独立开发核心模块，增删改查功能。附件是我的简历，希望与您进一步沟通！";

    static Integer  num =0;
    // 自动回复关键词映射
    private static final Map<String, String> autoReplies = new HashMap<>();
    // 控制聊天监控线程的标志
    private static volatile boolean isMonitoring = false;
    private static Thread monitorThread = null;
    // 全局消息监听相关
    private static volatile boolean isGlobalMonitoring = false;
    private static Thread globalMonitorThread = null;
    // 跟踪已处理过的职位
    private static Map<String, String> trackedJobs = Collections.synchronizedMap(new HashMap<>());
    static {
        autoReplies.put("在职离职", "目前是离职状态，合适的话可快速上岗！");
        autoReplies.put("外包", "外包也可以考虑");
        autoReplies.put("薪资", "期望到手9K以上，具体可面议。");
        autoReplies.put("项目经验", "参与过游戏陪玩平台系统开发，独立完成核心模块开发。");
        autoReplies.put("技术栈", "熟悉SpringBoot、Redis、MyBatis等技术。");
    }

    public static void main(String[] args) throws Exception {
        // Proxy configuration - start
        String proxyHost = "your.proxy.host"; // Replace with your proxy host
        int proxyPort = 8080; // Replace with your proxy port
        String proxyUser = "your_username"; // Replace with your proxy username
        String proxyPass = "your_password"; // Replace with your proxy password
        
        // Create ChromeOptions with proxy authentication
        ChromeOptions options = createProxyOptionsWithAuth(proxyHost, proxyPort, proxyUser, proxyPass);

        // 禁用系统代理设置
        options.addArguments("--proxy-server='direct://'");
        options.addArguments("--proxy-bypass-list=*");

        // 防止浏览器自动关闭的相关参数
        options.addArguments("--disable-blink-features=AutomationControlled");
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");
        
        System.setProperty("webdriver.chrome.driver", "D:\\RuanJian\\Jdk11\\bin\\chromedriver.exe");

        // 创建带有代理设置的新实例
        WebDriver webDriver = new ChromeDriver(options);
        
        // 添加隐式等待
        webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        
        // 示例：打开 Boss 直聘网站
        webDriver.get("https://www.zhipin.com/");
        
        // 使用显式等待确保页面加载完成
        WebDriverWait wait = new WebDriverWait(webDriver, 30);
        wait.until(ExpectedConditions.presenceOfElementLocated(By.tagName("body")));

        // 等待登录完成，进入主页
        wait.until(ExpectedConditions.titleContains("BOSS直聘"));

        // 示例：查找第一个职位沟通按钮并点击打招呼
        WebElement chatButton = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(".chat-btn[ka*=chat_list]")));
        chatButton.click();

        // 点击系统预设的打招呼按钮
        WebElement hiButton = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(".btn-contact[ka*='chat_list']")));
        hiButton.click();
    }

    /**
     * 创建带有代理认证的ChromeOptions实例。
     *
     * @param host 代理主机地址
     * @param port 代理端口号
     * @param username 代理用户名
     * @param password 代理密码
     * @return 配置好的ChromeOptions对象
     */
    private static ChromeOptions createProxyOptionsWithAuth(String host, int port, String username, String password) {
        ChromeOptions options = new ChromeOptions();
        // 使用扩展来设置代理并进行认证
        // 这里需要一个自定义的扩展或者使用第三方库来实现认证功能
        // 示例中仅展示基本结构，实际应用可能需要更复杂的处理
        options.addArguments("--proxy-server=http://" + host + ":" + port);
        // 注意：Selenium本身不支持直接通过API设置代理认证信息，
        // 实际使用时可能需要手动配置浏览器或使用其他工具完成认证。
        return options;
    }
}
